
//以二维素组的形式看待程序
// #include <stdio.h>
// #define M 3
// #define N 4 

// void inverse(int a[M][N],int b[M][N]);

// int main()
// {
//     int a[M][N],b[M][N];
//     int i,j;
//     printf("Please input a array with %d row and %d column:\n",M,N);    //结合之前宏定义下的值，可增强程序的通用性1
//     for(i=0;i<M;i++)
//     {
//         for(j=0;j<N;j++)
//         {
//             scanf("%d",&a[i][j]);
//         }
//     }
//     inverse(a,b);
//     for(i=0;i<M;i++)
//     {
//         for(j=0;j<N;j++)
//         {
//             printf("%d ",b[i][j]);
//         }
//         printf("\n");
//     }
//     printf("\n");
//     return 0;
// }
// void inverse(int a[M][N],int b[M][N])   //创建两个数组，将a数组逆序后的结果保存在b数组中
// {
//     int i,j;
//     for(i=0;i<M;i++)
//     {
//         for(j=0;j<N;j++)
//         {
//             b[M-i-1][N-j-1]=a[i][j];    //b数组元素的下标值和a数组元素的下标值满足此关系
//         }
//     }
// }

//结合指针以一维素组的形式看待程序

#include<stdio.h>
#define M 3
#define N 4

void inverse(int *a,int n);
void swap(int *p,int *q);

int main()
{
    int i,j;
    int array[M][N];
    printf("Please input a array with %d row and %d rolumn:\n",M,N);
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
        {
            scanf("%d",&array[i][j]);
        }
    }
    inverse(&array[0][0],M*N);
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
        {
            printf("%d ",array[i][j]);
        }
        printf("\n");   //每结束一轮就输出一个换行符
    }
    return 0;
}
void inverse(int *a,int n)
{
    int *p=NULL,*q=NULL;
    for(p=a,q=a+n-1;p<=q;p++,q--)
    {
        swap(p,q);
    }
}
void swap(int *p,int *q)
{
    int temp;
    temp=*p;
    *p=*q;
    *q=temp;
}